﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Dominio;
using PresentacionWeb.ControlesDeUsuario;
using AjaxControlToolkit;
using DatosFabrica;
using System.Data;
using log4net;
using log4net.Config;

namespace PresentacionWeb
{
    public partial class Principal : System.Web.UI.Page
    {
        private AdministracionHandler adm;
        private CompraHandler indexador;
        protected TreeView tvCategorias;
        protected PlaceHolder PlaceHolderProductos;
        List<ItemCarritoPreview> carritoPreview;
        ILog log =  LogManager.GetLogger(typeof(Principal).Name);
	
        protected void Page_Init(object sender, EventArgs e)
        {
                AsyncPostBackTrigger upt = new AsyncPostBackTrigger();
                upt.ControlID = tvCategorias.UniqueID.ToString();
                upt.EventName = "SelectedNodeChanged";
                UpdatePanel2.Triggers.Add(upt);

                upt = new AsyncPostBackTrigger();
                upt.ControlID = btnBuscar.UniqueID.ToString();
                upt.EventName = "Click";
                UpdatePanel2.Triggers.Add(upt);

                upt = new AsyncPostBackTrigger();
                upt.ControlID = btnUpdateCarrito.UniqueID.ToString();
                upt.EventName = "Click";
                UpdatePanel1.Triggers.Add(upt);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Class1.getInstance();
                carritoPreview = new List<ItemCarritoPreview>();
                Session.Add("Carrito", carritoPreview);

                adm = AdministracionHandler.getInstance();
                indexador = CompraHandler.getInstance();
                //tvCategorias = new TreeView();
                //PlaceHolderProductos = new PlaceHolder();
                foreach (BLCategoria cat in adm.getBLCategorias())
                {
                    if (cat.CatEstado == 0)
                    {
                        TreeNode tn = new TreeNode(cat.CatDescripcion, cat.CatId.ToString());
                        tvCategorias.Nodes.Add(tn);
                        ListItem it = new ListItem(cat.CatDescripcion, cat.CatId.ToString());
                        ddlCategorias.Items.Add(it);
                        ddlCategoriasAvanzadas.Items.Add(it);
                    }
                }

                
            }
            carritoPreview = (List<ItemCarritoPreview>)Session["Carrito"];
            cargarCompras(carritoPreview);
            btnUpdateCarrito.Click += new EventHandler(linkBtnAddCarrito_Click);
            if (Session["esAdministrador"] == "SI")
            {
                PanelAdministracion.Visible = true;
            }
            else
                PanelAdministracion.Visible = false;
            if (Session["Logueado"] == "SI")
            {
                PanelLogin.Visible = false;
                Panel4.Visible = true;
            }
        }

        private void linkAdmin_Click(object sender, EventArgs e)
        {
           
        }

        private void cargarCompras(List<ItemCarritoPreview> lista)
        {
            gvCarrito.DataSource = lista;
            gvCarrito.DataBind();
        }

        private void cargarProductos(List<BLProducto> productos)
        {
            gvResultados.DataSource = productos;
            gvResultados.DataBind();
        }

        protected void tvCategorias_SelectedNodeChanged(object sender, EventArgs e)
        {
            Dictionary<string, string> patron = new Dictionary<string, string>();
            patron.Add(Indexador.IX_IDCATEGORIA, tvCategorias.SelectedNode.Value);

            List<BLProducto> listaProductos = new FabricaConcreta().getCompraHandler().buscar(patron);
            cargarProductos(listaProductos);

        }

       
        protected void PlaceHolderBusquedaAvanzada_Load(object sender, EventArgs e)
        {
            //Load el PlaceHolderBusquedaAvanzada
            txtBusquedaRapida.Enabled = false;
            
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            lblError.Text = "";
            Dictionary<string, string> criterio = new Dictionary<string, string>();
            CompraHandler ix = new FabricaConcreta().getCompraHandler();
            // Busqueda Avanzada tiene Index = 1
            if (Accordion1.SelectedIndex == 1)
            {
                //BusquedaAvanzada busq = (BusquedaAvanzada)PlaceHolderBusquedaAvanzada.Controls[0];

                if (txtCodigo.Text == "" && txtDescripcion.Text == "" && txtNombre.Text == "" && txtPrecio.Text == "")
                    lblError.Text = "Debe escribir por lo menos un filtro.";
                else
                {
                    
                    try
                    {
                        
                        if (ddlCategoriasAvanzadas.SelectedItem.Value != "-10")
                            criterio.Add(Indexador.IX_IDCATEGORIA, ddlCategoriasAvanzadas.SelectedItem.Value);
                        if (txtNombre.Text != "")
                            criterio.Add(Indexador.IX_NOMBRE, txtNombre.Text);
                        if (txtDescripcion.Text != "")
                            criterio.Add(Indexador.IX_DESCRIPCION, txtDescripcion.Text);
                        if(txtCodigo.Text != "")
                            criterio.Add(Indexador.IX_CODIGO,txtCodigo.Text);
                        if (txtPrecio.Text != "")
                            criterio.Add(Indexador.IX_PRECIO, txtPrecio.Text);
                        log.Info("Busqueda realizada: " + criterio);
                        cargarProductos(ix.buscar(criterio));
                    }
                    catch (Exception ex)
                    {
                        lblError.Text = "No se pudo realizar la busqueda. ";
                        lblError.Text += ex.Message;
                    }
                }
            }
            else if (Accordion1.SelectedIndex == 0 /*Busqueda Basica*/)
            {
                if (txtBusquedaRapida.Text != "")
                {
                    if (ddlCategorias.SelectedItem.Value != "-10")
                    {
                        cargarProductos(ix.buscar(ddlCategorias.SelectedItem.Value, txtBusquedaRapida.Text));
                        log.Info("Busqueda realizada: " + txtBusquedaRapida.Text);
                    }
                    else
                    {
                        cargarProductos(ix.buscar(txtBusquedaRapida.Text));
                        log.Info("Busqueda realizada: " + txtBusquedaRapida.Text);
                    }
                }
                else
                    lblError.Text = "Debe ingresar un texto a buscar.";
            }

        
        }


               


        protected void linkBtnDetalles_Click(object sender, EventArgs e)
        {
            //Response.Redirect("~/AltaYBusqueda.aspx?idProducto=" ;

        }


       

        protected void gvCarrito_RowDeletedOrCreated(object sender, GridViewRowEventArgs e)
        {
            // Row Added
          if(e.Row.RowIndex > -1)
          {
              try
              {
                  lblCostoTotal.Text = (int.Parse(lblCostoTotal.Text) + int.Parse(e.Row.Cells[2].Text)).ToString();
              }
              catch (Exception ex)
              {
              }
          }
        }

        protected void gvCarrito_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {

        }

        protected void linkBtnAddCarrito_Click(object sender, EventArgs e)
        {
                        

        }

        protected void btnUpdateCarrito_Click(object sender, EventArgs e)
        {
            GridViewRow gvRow = (GridViewRow)(sender as Control).Parent.Parent;

            int index = gvRow.RowIndex;
            try
            {
                CompraHandler compra = new FabricaConcreta().getCompraHandler();
                //compra.agregarProductoACarrito("jbello", int.Parse(gvRow.Cells[0].Text));
                carritoPreview = (List<ItemCarritoPreview>)Session["Carrito"];
                carritoPreview.Add(new ItemCarritoPreview(gvRow.Cells[1].Text, 1, decimal.Parse(gvRow.Cells[3].Text)));                

                // UpdatePanel1.Update();
            }
            catch (Exception ex)
            {

            }
        
           
        
        }

        protected void linkAdmin_Click1(object sender, EventArgs e)
        {
            Response.Redirect("~/AdministracionWeb.aspx");
        }

        protected void btnConfirmarCompra_Click(object sender, EventArgs e)
        {
            PanelDatosCompra.Visible = true;

        }

        protected void btnConfirmarCompra_Click1(object sender, EventArgs e)
        {
            // Confirmar la compra
            try{

            CompraHandler compra = new FabricaConcreta().getCompraHandler();
            compra.agregarCompra(DateTime.Now, txtDirCompra.Text, txtTelCompra.Text, "jbello");
            }catch(Exception ex)
            {
                lblErrorCompra.Text = "NO se pudo realizar la compra. ";
                    lblErrorCompra.Text += ex.Message;
            }
        }

        protected void gvResultados_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        protected void gvCarrito_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                lblErrorLogin.Text = "";
                Dominio.IAutenticacion autenticar = new Dominio.Autenticacion();
                AdministracionHandler adm = new FabricaConcreta().getAdministracionHandler();
                if (autenticar.login(txtUsuario.Text, txtPassword.Text))
                {
                    Session.Add("Usuario", txtUsuario.Text);
                    BLUsuario user = adm.getUsuarioPorUserName(txtUsuario.Text);
                    if (user.esAdmin)
                        Session.Add("esAdministrador", "SI");
                    if (user.esGerente)
                        Session.Add("esGerente", "SI");

                }
                else
                {
                    log.Error("Usuario " + txtUsuario.Text + " error al autenticarse");
                    lblErrorLogin.Text = "Usuario y Password incorrectos.";
                }
            }
            catch (Exception ex)
            {
                lblErrorLogin.Text = ex.Message;
            }
        }

        protected void LoginStatus1_LoggedOut(object sender, EventArgs e)
        {
            try
            {
                lblErrorLogin.Text = "";
                Session["Logueado"] = "NO";
                AdministracionHandler adm = new FabricaConcreta().getAdministracionHandler();
                IAutenticacion aut = new Dominio.Autenticacion();
                aut.logout(Session["Usuario"].ToString());
            }
            catch (Exception ex)
            {
                lblErrorLogin.Text = ex.Message;
            }
        }




    }
}
